home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Resources / Online / Term / Extras / Source / term-source.lha / TerminalTest.c < prev    next >
C/C++ Source or Header  |  1996-10-20  |  2KB  |  141 lines

  1. /*
  2. **    TerminalTest.c
  3. **
  4. **    Terminal emulation test routines
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. STATIC BPTR                    TestFile;
  17. STATIC UBYTE                TestFileName[MAX_FILENAME_LENGTH];
  18. STATIC struct MsgPort        *MicroPort;
  19. STATIC struct timerequest    *MicroRequest;
  20. STATIC BOOL                    UseTestDelay;
  21.  
  22. STATIC VOID
  23. MicroCleanup(VOID)
  24. {
  25.     if(MicroRequest)
  26.     {
  27.         if(MicroRequest->tr_node.io_Device)
  28.             CloseDevice((struct IORequest *)MicroRequest);
  29.  
  30.         DeleteIORequest((struct IORequest *)MicroRequest);
  31.         MicroRequest = NULL;
  32.     }
  33.  
  34.     if(MicroPort)
  35.     {
  36.         DeleteMsgPort(MicroPort);
  37.         MicroPort = NULL;
  38.     }
  39.  
  40. }
  41.  
  42. STATIC BOOL
  43. MicroSetup(VOID)
  44. {
  45.     if(MicroPort = CreateMsgPort())
  46.     {
  47.         if(MicroRequest = (struct timerequest *)CreateIORequest(MicroPort,sizeof(struct timerequest)))
  48.         {
  49.             if(!OpenDevice(TIMERNAME,UNIT_MICROHZ,(struct IORequest *)MicroRequest,NULL))
  50.                 return(TRUE);
  51.         }
  52.     }
  53.  
  54.     MicroCleanup();
  55.  
  56.     return(FALSE);
  57. }
  58.  
  59. VOID
  60. StopTerminalTest()
  61. {
  62.     MicroCleanup();
  63.  
  64.     if(TestFile)
  65.     {
  66.         Close(TestFile);
  67.         TestFile = NULL;
  68.     }
  69.  
  70.     if(MainJobQueue && TerminalTestJob)
  71.         SuspendJob(MainJobQueue,TerminalTestJob);
  72. }
  73.  
  74. VOID
  75. StartTerminalTest(ULONG Qualifier)
  76. {
  77.     struct FileRequester *FileRequester;
  78.  
  79.     StopTerminalTest();
  80.  
  81.     if(FileRequester = OpenSingleFile(Window,"Open terminal test file",NULL,NULL,TestFileName,sizeof(TestFileName)))
  82.     {
  83.         if(TestFile = Open(TestFileName,MODE_OLDFILE))
  84.         {
  85.             if(MicroSetup())
  86.             {
  87.                 if(Qualifier & IEQUALIFIER_RSHIFT)
  88.                     UseTestDelay = FALSE;
  89.                 else
  90.                     UseTestDelay = TRUE;
  91.  
  92.                 ActivateJob(MainJobQueue,TerminalTestJob);
  93.             }
  94.             else
  95.             {
  96.                 Close(TestFile);
  97.                 TestFile = NULL;
  98.             }
  99.         }
  100.  
  101.         FreeAslRequest(FileRequester);
  102.     }
  103. }
  104.  
  105. BOOL
  106. HandleTerminalTestJob(JobNode *UnusedJob)
  107. {
  108.     UBYTE LocalBuffer[40];
  109.     LONG Len;
  110.  
  111.     Len = Read(TestFile,LocalBuffer,sizeof(LocalBuffer));
  112.  
  113.     if(Len > 0)
  114.     {
  115.         LONG i;
  116.  
  117.         if(UseTestDelay)
  118.         {
  119.             for(i = 0 ; i < Len ; i++)
  120.             {
  121.                 MicroRequest->tr_node.io_Command    = TR_ADDREQUEST;
  122.                 MicroRequest->tr_time.tv_secs        = 0;
  123.                 MicroRequest->tr_time.tv_micro        = MILLION / 200;
  124.  
  125.                 DoIO((struct IORequest *)MicroRequest);
  126.  
  127.                 (*ConTransfer)(&LocalBuffer[i],1);
  128.             }
  129.         }
  130.         else
  131.         {
  132.             for(i = 0 ; i < Len ; i++)
  133.                 (*ConTransfer)(&LocalBuffer[i],1);
  134.         }
  135.     }
  136.     else
  137.         StopTerminalTest();
  138.  
  139.     return(FALSE);
  140. }
  141.